package si.banst.tecajnice.web.mbean;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Logger;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;

import si.banst.tecajnice.ejb.TecajniceBeanRemote;
import si.banst.tecajnice.ejb.napake.NapakaPriPovprasevanju;
import si.banst.tecajnice.entitete.Tecaj;
import si.banst.tecajnice.entitete.Tecajnica;
import si.banst.tecajnice.entitete.VrstaTecajnice;
import si.banst.tecajnice.util.DateUtil;

@Named
public class PreracunTecajnicMBean {
	private static final Logger logger = Logger
			.getLogger(PreracunTecajnicMBean.class.getName());

	@EJB(lookup="corbaname:iiop:tecajnice.banst.si:2811#TecajniceBean")
	private TecajniceBeanRemote tecajniceBean;

	private List<VrstaTecajnice> seznamVrstTecajnic;

	private int sifraIzbraneVrstaTecajnice;

	private Tecajnica preracunanaTecajnica;

	private Date izbranDatum;

	public PreracunTecajnicMBean() {
		super();
	}

	@PostConstruct
	public void init() {
		logger.info("Inicializiram PreracunTecajnicMBean");
		logger.fine("Pridobivam seznam vrst tečajnic");
		try {
			seznamVrstTecajnic = new ArrayList<VrstaTecajnice>();
			List<VrstaTecajnice> vseVrsteTecajnic = tecajniceBean
					.vrniVseVrsteTecajnic();
			for (VrstaTecajnice vt : vseVrsteTecajnic)
				if (vt.getOsnovaZaPreracun() != null)
					seznamVrstTecajnic.add(vt);
			if (seznamVrstTecajnic == null || seznamVrstTecajnic.isEmpty())
				throw new NapakaPriPovprasevanju("Seznam tečajnic je prazen.");
		} catch (NapakaPriPovprasevanju e) {
			logger.severe("Seznam tečajnic je prazen." + e.getMessage());
		}
	}

	public void preracunajTecajnico() {
		logger.fine("Preracunavam tečajnico za datum " + izbranDatum
				+ " in vrsto tečajne liste " + sifraIzbraneVrstaTecajnice);
		if (getIzbranDatum() == null) {
			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(FacesMessage.SEVERITY_ERROR,
							"Tečajnice ni mogoče najti.", "Datum ni izbran."));
			return;
		}
		try {
			preracunanaTecajnica = tecajniceBean.preracunajTecajnico(sifraIzbraneVrstaTecajnice, izbranDatum, true);
		} catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(FacesMessage.SEVERITY_ERROR,
							"Napaka pri preracunu tečajnice.", e.getMessage()));
			logger.warning("Napaka pri preracunu tecajnice. "
					+ e.getMessage());
		}
		if (preracunanaTecajnica == null)
			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(FacesMessage.SEVERITY_ERROR,
							"Tečajnice ni mogoče preračunati.", "Izbran datum: "
									+ getIzbranDatum()
									+ ". Izbrana vrsta tecajnice: "
									+ getSifraIzbraneVrstaTecajnice()));
	}

	public boolean isTecajnicaPreracunana() {
		if (preracunanaTecajnica != null)
			return true;
		else
			return false;
	}

	public boolean isSrednjiTecajiNapolnjeni() {
		for (Tecaj t : preracunanaTecajnica.getTecaji())
			if (t.getSrednjiTecaj() != null)
				return true;
		return false;
	}

	public boolean isNakupniTecajiNapolnjeni() {
		for (Tecaj t : preracunanaTecajnica.getTecaji())
			if (t.getNakupniTecaj() != null)
				return true;
		return false;
	}

	public boolean isProdajniTecajiNapolnjeni() {
		for (Tecaj t : preracunanaTecajnica.getTecaji())
			if (t.getProdajniTecaj() != null)
				return true;
		return false;
	}

	public Date getIzbranDatum() {
		return izbranDatum;
	}

	public void setIzbranDatum(Date izbranDatum) {
		this.izbranDatum = DateUtil.nastaviCasNaPolnoc(izbranDatum);
	}

	public List<VrstaTecajnice> getSeznamVrstTecajnic() {
		return seznamVrstTecajnic;
	}

	public Tecajnica getIzbranaTecajnica() {
		return preracunanaTecajnica;
	}

	public int getSifraIzbraneVrstaTecajnice() {
		return sifraIzbraneVrstaTecajnice;
	}

	public void setSifraIzbraneVrstaTecajnice(int sifraIzbraneVrstaTecajnice) {
		this.sifraIzbraneVrstaTecajnice = sifraIzbraneVrstaTecajnice;
	}

}
